<?php
declare (strict_types=1);

namespace app\middleware;

class Auth
{
    /**
     * 处理请求
     *
     * @param \think\Request $request
     * @param \Closure $next
     * @return Response
     */
    public function handle($request, \Closure $next)
    {
        // 添加中间件执行代码
        if (!$token = $request->header('token')) \Api::error('您还没有登录，请先登录', 401);
        //解密token并赋值
        if ($Account = \xy_jx\Utils\Encryption::decrypt($token)) {
            $redis = \Utils::redis();
            if (!$redis_token = $redis->get('Account:token_' . $Account['uid'])) \Api::error('登录状态已过期，请重新登录', 401);
            if ($redis_token == $token) {
                $request->__set('user', $Account);//设置全局用户信息
            } else {
                \Api::error('您的账号已在其他设备登录', 401);
            }
        } else {
            \Api::error('登录状态已过期，请重新登录', 401);
        }
        return $next($request);
    }
}
